#include <stdio.h>
#include <stdlib.h>

/*
 *	const int a;
 *	int const a;
 *
 *	常量指针
 *	const int *p;
 *	int const *p;
 *	
 *	指针常量
 *	int *const p;
 *	区分：先看到const先念常量
 *		看到*先念指针
 *	const后面是什么 什么就不能变
 *	const *p 后面是*p 指针指向地址的值不能变
 *	const p 后面是p   指针指向的地址不能变
 *
 *
 * 	即是指针常量 又是常量指针
 *	const int *const p;
 *
 * */

/*
 *宏  不检查语法
 */

#define PI 3.14
/*
 *指针修改const常量 有警告
 * */
static void test1(void)
{
	/*
	 * 常量化变量 
	 * 一旦定义必须初始化
	 * 检查语法
	 **/
	const float pi = 3.14;
//F	pi = 3.14159;
	printf("%f\n",pi);


	float *p = &pi;
	*p = 3.14159;		
	printf("%f\n",pi);


}

static void test2(void)
{
	int i = 1;
	int j = 100;
	const int *p = &i;

//T	i = 10;
//F	*p = 10;
	
	printf("%d\n",*p);

	p = &j;
	j = 1000;
	printf("%d\n",*p);
//:14  :60 指向可以变，指针的指向的值不能变 :60F的原因


}

static void test3(void)
{
	int i = 1;
	int j = 1000;
	int *const p = &i;

	printf("%d\n",*p);
	
	*p = 100;
	printf("%d\n",*p);

//F	p = &j;
	printf("%d\n",*p);
// 	:83 指针的指向不能变 :83F的原因
}

static void test4(void)
{
	int i = 1;
	int j = 100;
	const int *const p  = &i;

	printf("%d\n",*p);

//	*p = 1000;
	printf("%d\n",*p);

//	p = &j;
	printf("%d\n",*p);
}


int main(void)
{
	test1();
	test2();
	test3();
	test4();
	exit(0);
}
